var createError = require('http-errors');//处理http错误
var express = require('express');//epress模块
var path = require('path');//用来做路劲解析node自带的模块
var cookieParser = require('cookie-parser');//用来格式花cookie数据的
var logger = require('morgan');//做日志输出
var mongoose = require('mongoose')


var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

//设置当前项目使用的模板引擎
// view engine setup
app.set('views', path.join(__dirname, 'views')); //设置模板文件的路径
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));//设置静态资源目录

app.use('/', indexRouter);
app.use('/users', usersRouter);



const managers = ['admin', 'admin001'] //定义俩个用户名
app.get('/admin/login', (req, res) => {
  res.render('admin/login')
})
//登录接口
app.post('/admin/login', (req, res) => {
  if (req.body.userName && req.body.password) {
    if (managers.indexOf(req.body.userName) > -1) {
      if (req.body.password == "admin") { 
        res.cookie('user','admin') //设置一个 用户名
        res.json({
          code: 1,
          info:'登录成功'
        })
      } else {
        res.json({
          code: 0,
          info:'密码错误'
        })
      }
    } else {
      res.json({
        code: 0,
        info:'用户名输入错误'
      })
    }
  } else {
    res.json({
      code: 0,
      info:'用户名和密码不能为空'
    })
  }
})

//express中得路由查找
//原则从上往下找
//找到适合得不在查找  先当于全局拦截 第三个参数next表示继续执行
//以/admin匹配的都会访问
app.all('/admin/*', (req, res,next) => {
  // res.send('您访问了管理后台')
  //如果cookies里面有用户名就让他往下走
  if (req.cookies.user) {
    console.log('您访问了管理后台');
  next()
  } else {
    // res.send('请先登录')
    res.redirect("/admin/login")
  }

})



app.use('/admin/main', require('./routes/admin/main'))
app.use('/admin/movies', require('./routes/admin/movies'))



//异常处理
// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});


// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);//设置页面返会的状态码
  res.render('error');//使用一个模板文件显示页面的内用 模板文件查找的路径在模板配置的时候已经设置
});
mongoose
  .connect('mongodb://localhost:27017/app-20111')
  .then(() => { console.log('数据库连接成功......') })
  .catch((err) => console.log((err)))

module.exports = app;
